package jee.boot.module.bpm.table;

import jee.boot.entity.bpm.BusinessTable;
import jee.boot.module.bpm.table.mysql.model.FormTable;

import java.util.List;
import java.util.Map;

/**
 * 数据执行器
 */
public interface TableExecutor {

    /**
     * 检查表是否存在
     *
     * @param table table.name 需设置表名
     * @return
     */
    int existTable(FormTable table);

    /**
     * 创建表
     *
     * @param table table信息,以及column信息
     */
    void createTable(FormTable table);

    /**
     * 删除表
     *
     * @param table
     */
    void dropTable(FormTable table);

    /**
     * 修改表注释
     * @param table
     */
    void alterTableComment(FormTable table);

    /**
     * 添加字段
     *
     * @param table table.columnList是需要被添加的字段
     */
    void addColumn(FormTable table);

    /**
     * 修改字段
     *
     * @param table table.columnList是需要被修改的字段
     */
    void modifyColumn(FormTable table);

    /**
     * 删除字段
     *
     * @param table table.columnList是需要被删除的字段
     */
    void dropColumn(FormTable table);

    /**
     * 查看表信息
     * @param table
     * @return
     */
    FormTable findTable(FormTable table);

    /**
     * 查询数据库中已存在的表
     * @return
     */
    List<FormTable> findTableList(FormTable table);
    /**
     * 查看表所有列信息
     * @param table
     * @return
     */
    List<Map<String,Object>> findTableColumns(FormTable table);

    /**
     * 同步表结构
     * @param table
     */
    void syncTable(BusinessTable table);
}
